'''
1. 什么是组合
    组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 *****
'''
# class Foo:
#     xxx = 100
#
# class Bar:
#     yyy = 200
#     def zzz(self):
#         print('我是bar方法')
# obj=Foo()
# obj1=Bar()
# obj.attr = obj1
# # obj.attr 等价于 obj1
# print(obj.xxx)
# print(obj.attr.yyy)
# obj.attr.zzz()
'''
2. 为何要用组合
    通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起
    从而减少类与类之间代码冗余
'''
'''
3. 如何用组合
'''


class People:
    school = '图灵学院'

    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex


class Student(People):

    def __init__(self, name, age, sex, ):
        People.__init__(self, name, age, sex)


class Teacher(People):

    def __init__(self, name, age, sex, course=[]):
        super().__init__(name, age, sex)
        self.course = course

    def tell_info1(self):
        # 如果for循环空列表会报错吗？
        for i in self.course:
            # print(i)
            # 课程属性
            print('<课程名:%s价格:%s>' % (i.c_name, i.c_price))
            # 课程方法
            i.tell_info()


class Course:

    def __init__(self, c_name, c_price):
        self.c_name = c_name
        self.c_price = c_price

    def tell_info(self):
        print('<课程名:%s价格:%s>' % (self.c_name, self.c_price))


python = Course('python开发', 10000)
math = Course('高等数学', 3000)
English = Course('英语', 4000)
music = Course('音乐', 5000)
drawing = Course('绘画', 6000)

tea = Teacher('大海', 24, 'man')
# 把music课程对象添加到老师对象tea的属性里面
# tea.course = music

# tea.course.tell_info()
# 在添加一个python课程对象，替换了music
# tea.course = python

# tea.course.tell_info()

# 如果我想把一堆的对象放到一个对象属性里面，我们怎么做？
# 思考一下？

print(tea.course)
# tea.course.append(python)
# tea.course.append(music)
# tea.course.append(math)
# 这个时候是列表里面装了3个对象
print(tea.course)
print('======')
tea.tell_info1()
